Not to bump an old topic, but i found something that might be useful for some of you if you didn't already know. You can bypass the 300 kb ringtone limit quite easily.
How to Bypass Ringtone Limit on AT&T Samsung Impression | New At & t Cell Phones
I must also comment about this whole google contact issue. At first when I exported my contacts from google and then imported them, it indeed duplicated my contacts AND it duplicated it into the gmail server.
I did what Dennis did, creating the same name contact onto the phone. That way, it didn't duplicate the name onto the gmail server and it auto-links the google contact and lets you assign a custom ringtone/throw them in a group. However, when you use this method and throw people into groups (you can't throw google contacts into groups), custom ringtones that are assigned to a group will not work for those contacts. It's a shame, because essentially any contact you retrieved through google can't have a custom ringtone that rings according to what group they're in. You have to set a specific custom ringtone, which is extra work.
And about the facebook thing where you can see their status updates and stuff... i could never get mine to work =/. any tips on that? I just wish contacts worked more elegantly...
EDIT:
So I just did a series of tests to see how the algorithm works, and how the system decides on what to do with the custom ringtones.
As you guys already mentioned, you cannot assign a google contact a custom ringtone. What I did first on my phone was load up my google contacts onto my phone, then made a duplicate in order to throw them into a group since it links them to a real phone contact. HOWEVER, by doing it this way, the phone registers the google contact as THE FIRST registered contact (you can see the icons, it says Linked contacts: "G" and "Phone"). Even though my contacts are thrown into groups that have custom ringtones, the phone will not ring the custom ringtone because it's set to use the preferences of "G," which is for google contacts. It will simply ring your default ringtone.
In order to fix that, what I did was:
1. Back up contacts onto SD card
2. Log into gmail, delete contacts.
3. Sync gmail contacts on phone (they're now gone; phone contacts are the only ones in there now)
4. Upload the backup to gmail again
This puts the Phone contact in 1st place, fixing the problem of custom ringtones that are set in groups to not ring. Google contacts is now listed 2nd place. Also, your contact in your phone can have no number--meaning, it'll still read the number off your gmail contact, but still ring the custom ringtone assigned to the group. That said, this can all be safely done simply by duplicating contacts on your phone (simply by entering their name in), without the need to recopy the numbers.