There is no physical way to change the message tones on the iPhone other than selecting another stock tone. You must jailbreak your device and then you can replace the stock tones with custom ones you've either downloaded or created. It's fairly easy to do.
Geez, this blows! I have custom ringtones loaded on my 4s, they're in the proper format and length, and they play when I select them from the menu within Contacts. They get saved as the custom ringtone for each contact as well. But when the phone rings, the default phone ringtone is the one that plays.