Connect your iPhone. Open GarageBand. Create a track using Apple's loops or compose an entire song on your own. (The possibilities are sort of endless here and opens the floodgates for highly inappropriate ringtones.) Click on the "Share" tab, and under it is a selection called "Send Ringtone to iTunes". Click that, and it lets you select a 10-second loop of your track, mixes it, and sends it to iTunes. Once you've done that, simply sync your iPhone and voila! You've created your own ringtone.
After you sync, you can go into the iPhone's settings and choose the newly added ringtone as your ringer. It appears in a separate list from the official Apple ringtones, called "Custom."
At first, I used an existing song I was working on in GarageBand. The 10-second loop sounds pretty good as a ringtone, but I decided it would be more fun to choose something from my iTunes library.
With GarageBand open, I went into my music folders and dragged a song into the GarageBand track editor. It imported the song with no issues. I then picked a 10-second loop of that song (a killer riff from Lamb of God's Sacrament CD) and repeated the process above. It worked just the same. I was able to use a song from my iTunes music library and create a ringtone out of it for free. No silly extra charge.
The one caveat is that this will work only for users of Apple computers. GarageBand is part of the iLife suite of applications and is not available on Microsoft Windows machines.