When I got my iPhone I was pretty pissed about Apple's arrogance in locking down ringtone usage. I'm not aware of any other phone making restrictions on ringtones, so WTF is Apple's excuse to blame this on copyright issues from the music labels. Heck, I've bought the music already let me use it - for personal use at least - as I see fit. But it's not just a matter of 'rights' - I own the ringtones I wanted to get on my phone. The music I use I've written and recorded and all I want is use it on the phone. In this case the whole copyright issue certainly doesn't hold.
During my original post people were nice enough to make suggestions for jailbreaking the iPhone and in the end that's what I ended up doing. After doing a bit of research and checking out various options I ended up - as suggested - jailbreaking the phone and opening it up to third party applications as well as getting full access to the iPhone file system.
That didn't immediately solve the ringtones problem but it did allow for some cool and useful applications to be installed on the phone.
As to the ringtones a little more work is required and here's a quick summary of what I did to get my custom music into the iPhone as ring tones from a Windows box.
JailBreaking the iPhone
The first thing to do is jailbreak the phone. This basically unlocks the phone and allows installation of third party software by providing an installer interface that can be used to put additional software on the phone. There are a number of different tools available to perform this task with varying levels of manual intervention.
After a bit of research I used ZiPhone, which is as easy to use as you can imagine. The tool unlocks the phone, jail breaks and if you trying to get the phone to work on another network can activate the phone without going to AT&T first.

You can literally get it all done with one click, but be sure to read the information and help topics first. There's some good information on what goes on and what can go wrong and how to undo it if necessary.
<Disclaimer>
USE THIS TOOL AT YOUR OWN RISK!
I had no problems, and I figured even if there is a problem you can always restore your phone back to factory settings. So if you're uncomfortable with these 'hack' kinda tools then by all means read up first or leave it alone. This isn't shrinkwrap software with a guarantee, but the risks are low.
</Disclaimer>
If it works for you don't forget to donate a few bucks to the author at the source site, because looking at the manual steps involved for doing all this, this tool wraps it up really nicely and does the job in a few minutes instead of a few hours of manual farting around trying to find the right instructions for the right firmware version and so on.
Install OpenSSH and BSD Subsystem on the IPhone (if jailbreaking tool didn't install it)
Jailbreaking is essentially installation of an installer and opening up the file system so that other software can be copied onto the device. ZiPhone automatically installs OpenSSH and the BSD file system on the phone so you don't need to do this explicitly. Other installers may make you install these subsystems manually after the fact. These are required in order to allow remote access and file browsing on the phone.
That's it for the iPhone installation.
Once OpenSSH is installed you can now access the phone with an SSH terminal like puTTY and you can navigate the file system that way. But there's still the problem of copying files from Windows to the phone so another utility makes this job a bit easier.
Install WinSCP on your Windows Machine
WinSCP is an SFTP and SSH client and file browser that allows you interactively browse the file system of an SSH host so you can effectively drag and drop files from your desktop machine to the phone's OS.
To log on to the phone you'll need to find its IP address. This is easiest when you're on your WI-FI network. To find the IP address go to the phone, find your WI-FI network and click the blue arrow for more information. The IP Address of the phone on the Wi-Fi network should be displayed on the page.
Then use WinSCP to connect to that IP Address:
On my home network the address is a typical DHCP address as shown above.
The username is root and the password that worked for me is alpine. Another user/password pair is mobile / dottie apparently. These may change in the future - but if they do you can probably find them posted somewhere shortly after the release.
Once you're connected with WinSCP you can then navigate to the /Library/Ringtones folder. Note that this particular directory is off the OS root, rather than the user root so you have to navigate back manually enter it in the Open Directory dialog:
Once you do - the motherlode - your ringtones folder. You can now drag and drop files into the Ringtones directory:
Once you got the right folder up you can simply drag and drop files either in the file browser or from explorer by dropping on the remote directory. Ringtones are files with a .m4r extension. These are essentially standard Apple .m4a files that have been renamed to .m4r.
If your files are in MP3 format as are mine, you can go into iTunes and choose Convert to AAC which produces an .m4a file:
Rename the resulting file to .m4r and then simply drag and drop from Explorer into the WinSCP interface. The copied ringtone will show up in the iPhones ringtone list based on its filename so name it accordingly by stripping off track numbers and artist/album info.
Voila, custom ringtones.
Watch out for Security: Known Passwords by default
As I was going through these motions I was a bit appalled at the security of this process. It would seem that, since the phone uses fixed username and password access that the phone is highly vulnerable on a WiFi network. Anybody who has the tools I've just shown can possibly access any iPhone on the network given you have an IP address.
Oh yeah, that is only if your phone is jailbroken <g>. IOW, this is not a problem with a stock phone since it's not accessible directly so you can't hammer Apple too hard for not addressing this security issue.
So... you probably don't want to keep your jailbroken phone open like this. One way - perhaps the easiest - is to uninstall OpenSSH with the Installer that the jailbreak installed. This effectively removes the remote access to the phone. You'd need to reinstall OpenSSH when you need to update anything else on the phone but it only takes a minute so that's no big deal.
The other option is the change the phone's password.
Now, I made the mistake of changing my password manually through the shell. I used puTTY to log on to the phone and use the passwd command to change the password. Big mistake! The password that the iPhone expects is encrypted and changing the password manually doesn't do the proper encryption. With the plain password set, the phone went into endless recycle modes and I had to force it into recovery mode to reset it and reinstall the firmware from scratch! Ouch - operator error on this one. If this happens to you you may still be able to salvage without reinstalling by copying the old password file (or using the tool described below and resetting the password to alpine) and restoring it. In short don't use the passwd command through the shell!
Instead, to change the password, the master password file needs to be replaced. You can find detailed steps on how to do this here and here. There's also a nice online tool that creates the password string and even a full password file for you. You can use WinSCP to edit or replace the file in /etc/master.passwd on the phone's file system. Make sure you back up the original file first, then use the Edit option to either replace the whole file with the content from the page, or replace just the password. When you're done remember to change your password for WinSCP to connect to the phone again.
Personally I feel better turning off OpenSSH so there's no remote access at all. In addition, apparently running OpenSSH sucks on the battery as the server continuously checks for connections when the phone is active. There's really no reason to have OpenSSH running all the time anyway, unless I need to access the phone to copy files manually or shell into the phone which - hopefully - shouldn't be very often.
None of this is new of course - I basically followed instructions from other sites, but the information was a bit scattered about and so I thought I'd put it here in one place. And - to maybe remember WTF I did a few months from now when I need to copy another file to the phone.
Hopefully some of you find this useful.