For some reason I always put this on my top priority list for my phone even though I hardly get any phone calls at all! I could use any song from the library on my old phone (SE W800i) However, it's not as simple on the iPhone:
1) convert your song to AAC
2) cut it to under 30 seconds (could do this before Step#1)
3) change the extension of the file to .m4r
4) add the file to iTunes and it should appear in the Ringtone section.
If you think these steps are too complicated, good news for you: the freeware
iRinger does all these for you.
Finally, you need to sync the ringtone to your phone. You can't just drag-and-drop from the item you see in Step#4 to your phone in iTunes. Instead, click on the name of your phone on the left pane. You will see the main page for your phone on the right pane. Click the "Ringtone" tab and check the "Sync" radio button (make sure the ringtone you want is selected) Then "Apply" this change.
Now you could choose these ringtones under custom on your iPhone!