I have the same problem - Custom contacts don't allways play.
So does my wife any ANYONE who has an Android phone.
This problem appears even in Android 4 versions.
now being a programmer myself, although not and Android dev, I believe this is a bug in the basic Android source code, and therefore CANNOT be fixed by any app or external "trick". It can ONLY be resolved if the bug is located in the original code and the code being modified to fix this issue.
I believe the problem has nothing to do Google contacts, sound format bla bla bla...
According to my gut feeling and programming experience, the problem lays in the simple annoying fact that sometimes the Android system cannot find the file to be played or cannot "decide" which to play.
You see, in Androids root directory there's a folder named
"System/media/audio/ringtones"
Also, on your USB storage there's another folder called
"sdcard/media/audio/ringtones"
Notice the identical part: "/media/audio/ringtones".
If the "sdcard" prefix is used, it will relate to your custom tones.
If the "System" prefix is used, it will relate to the built in tones.
Now, imagine a case where a call comes in and the tone you've assigned to it is... dunno... say "Pokerface_GaGa.ogg", BUT because of the bug the phone looks for this file in the OTHER path!! it looks for "System/media/audio/ringtones/Pokerface_GaGa.ogg" and since that file DOES NOT EXIST it reverts to the default ringtone.
To summarize this issue, the Android OS has a messup when dealing with the contact custom ringtone path. It sometimes uses a wrong file path and therefore cannot find the specific file so it plays the default ringtone. This is because initially the code does not utilize the correct FULL PATH all the way through. This is bad programming practice.
Sure the Android dev guys ( those who actually work at Google developing the next version ) CAN fix it. It requires to review the source code in a debugging environment and locating where the potential to messup can occur - and fix it. but for some reason this is neglected.
This is all only my theory...
Since my phone is rooted What I am going to try is:
1. Converting all my custom tones to ogg format
2. Transfering them to the folder where the Systems ones are
Again, you can only write to this folder if your device is rooted.
If this solution does not help - Then I will eat my hat and admit I was wrong
But it's worth a shot!!