Several users have reported an issue where iPhone ringtones assigned to specific contacts do not work. In other words, the ringtone can be selected and assigned to the contact properly, but when the contact calls, the default ringtone is played.
In some cases, this issue may be due to a number mismatch -- the number is stored on way on your iPhone but comes in using a different format. For instance, if you have the number stored in full international format, but it comes in as a local number, the correct ringtone may not play.
In other cases, the fix is simple: On your iPhone, navigate to Settings, then General, then Reset, then "Reset All Settings". Note that this will erase your voicemail password and other stored data.
Failing that, some users have found success with deleting the contact to which the ringtone is assigned, recreating the contact, then assigning the ringtone again.