I'm reprising this thread from the old list, with one slight addition.
(Verizon's idea to hobble its phones and set up a marketplace for ringtones irritated me no end, so being able to make my own on an iPhone would almost be worth the cost even if the iPhone had no other features.)

Steps to make your own ringtones

1. Find a piece of music that you like or record your own. Listen as if it were a ringtone. You want something simple, instantly recognizable, and probably not embarrassing when your phone rings in public. Voices may not be a good choice. I like the musical introductions to certain old-time rock 'n' roll songs. For example:
Hendrix, Little Wing
Clapton, Layla
Rolling Stones, Loving Cup (piano intro)
Led Zeppelin, When the Levee Breaks

I should probably add that some classical music and music intros to some country and Golden-Age music should work well. Lots of folk tunes, Celtic and so on would also work fine.

2. Open the music in an audio editing application. I use Sound Studio, which is not cheap, at $60, but I've used it for a long time. Audacity is free.

Verizon iPhones ring for 30 seconds before rolling over to voice mail (pretty short), and that's not modifiable. (Maybe an AT&T customer could chime in [heh, heh] with the facts for those iPhones.)
So 30 seconds is the frame you're working within. That's also somewhere around the limit of length iTunes will recognize as a ringtone.

2a. If you want the iPhone to vibrate before it starts ringing out loud, insert some seconds of silence at the beginning of the clip. I first tried 5 seconds, and that seems too short. I'm trying 8 seconds now. 06 01 11: I'm also experimenting with a ringtone with an 8-second fade in, and no silence. (In Sound Studio, you can shape the Fade In.)

2b. Cut the total clip to the length you want. Because of the 30-second rollover time, you don't want the ringtone to start silent, then play for some seconds, then go silent again, then start over, then cut off abruptly. So think in terms of 30 seconds total playing time. If you're picky, you want the clip to fade out in some logical way, the end of a musical phrase, for example.

Note that you need to set Vibrate in Settings. There are two places you can set Vibrate. One is for when the iPhone is switched to Silent, and the other is in the general sounds section below. If Vibrate is on, the phone will vibrate throughout the ringtone, though you can't hear the buzzing if it's not on a hard surface.

2c. Apply a fade-out filter to the last few seconds if you like. If you're bypassing the silent beginning, listen to this on a loop to see how it'll sound over and over.

So, for example, my current Little Wing ringtone goes as follows: 8 seconds silence, 20 seconds Little Wing intro with fadeout, 2 seconds silence. The silence at the end is fudge factor so that the Verizon rollover to voice and the end of the ringtone will appear to coincide.

2d. Save the result as AAC. I used 128 kbps.

3. In the Finder, change the file extension from whatever.m4a (normal AAC) to whatever.m4r (ringtone AAC).

4. Drag the m4r file to iTunes. It should pop into the Ringtone section in iTunes. (As of iTunes 12.7, save your ringtones in a Finder folder, for example in your Music folder. You also have to manually load the ringtones onto your iPhone. See this message for instructions:viewtopic.php?f=37&t=2413&p=8543&hilit=ringtone#p8543

5. With your phone plugged in, be sure to set the Ringtone section to All Ringtones or select your new one.

6. If you don't like surprises, test your ringtone by calling yourself (from another phone, of course).

I should also add that since I first wrote that set of instructions, I've struggled with the vibration. In iOS 6, if you have vibrate on, it's on all the time. You can work around that a bit by making a custom vibration pattern with a long pause after a short vibrate. That sort of works, but you can't make the pause, say, 27 seconds long. (I've requested an enhancement from Apple.)

Also, the vibration engine in the iPhone 5 is much stronger than the one in my old iPhone 4.

"Design is not just what it looks like and feels like. Design is how it works."
Steve Jobs

I just this week realized that you can convert any alert tone on your Mac (or any other sound, for that matter) into a ringtone for your phone.

I've had a custom ringtone for mail on my iPhone for some time, a short bell sound I made by editing a recording of a real bell. But I've been a little annoyed recently about how long even that is. (I've gotten a lot of e-mail from a couple of Apple Support discussions.)

On my Mac, I use Tink as my e-mail sound. I thought I'd see if I could extract that and use it on my iPhone. I have no idea why some sounds found on the Mac are available on the iPhone and others aren't. And some sounds available in some apps on the Mac are not available in other apps. (See below)

So I remembered that in OS X, all sound resources are .aiff files. Those are high-quality, uncompressed sound files.

I searched for "Tink" with a Finder-window Spotlight search and found the file. myHD > System > Library > Sounds
I option dragged it to the desktop, then opened the aiff in Sound Studio and then saved it out to the Desktop as m4a (AAC).
On the Desktop, I changed the suffix to m4r (ringtone AAC) and dragged that to iTunes. After syncing my iPhone, I had Tink as a custom ringtone.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

One case where it matters whether an app can use a particular tone is with iPhone calls and Handoff. Handoff uses Face Time (audio or video) to answer and make iPhone calls on your Mac. FaceTime uses a buried, fixed list of tones. (Weirdly, they're m4r files.) Most seem to me to be unusable in this application, and would be banned outright in any business setting. I settled on Bamboo, which is short, not too loud and not obnoxious. One problem is that the series of repetitions of the tone continue after you answer on your actual iPhone.

There's no built-in or easy way to add tones to the list. Here's a site that gives instructions. They also claim to offer a $0.99 application that will add ringtones for you. I haven't tried either.
There's such a crying need for flexibility for FaceTime ringtones--including a silent one--that I expect the feature to be added to OS X or a widely-used app such as TinkerTool pretty soon now.

"Design is not just what it looks like and feels like. Design is how it works."
Steve Jobs