So despite the odd amounts negativity in this thread I figured this out. I hope someone looking to do the same thing finds this and reads this first. It should be noted though none of this is 3CX supported, if you ever call support you would, at the very least, have to reprovision the phone with the default phone template, and possibly undo the ringtone until the support case is finished.
Steps to add custom ring tone (tested on GXP1780 and with Debian 3CX) are below. I would advise making sure you have a backup before proceeding with this, its nothing to fancy but I'm paranoid and like to make sure I have a backup before doing any changes in a production environment (this was done on a test bed but will be done on our live 3CX server soon once I verify the IP Tables commands).
1. Download the ringtone creation tool from here:
http://www.grandstream.com/support/tools
2. Edit or obtain audio file you would like to use for the ring tone. This tools creates 8, 16, or 24 second long ring tones, so keep this in mind when editing your audio file.
3. Save the audio file in .wave format
4. Open the ringtone creation tool
5. Click on select and find the .wav file you saved
6. Click on generate ringfile and it will generate a ring1.bin file in the directory containing the .wav file
7. Download a TFTP server (I used SolarWinds)
8. Place the ring1.bin file in the TFTP server's file repository folder (on Windows with SolarWinds this is C:\TFTP-Root)
9. Install the Debian TFTP client on the 3CX server
10. Open the required ports in IP Tables. **IMPORTANT** The way I did this (removed all firewall rules) is NOT recommended for a production environment (this was on a test bed VM), I only did this for testing, the proper way to do this would be to allow all traffic from the TFTP server in IP Tables, this entry can be removed for security concerns later. All traffic has to be allowed (or at least a large range of higher number ports) as the port changes each time the TFTP server attempts to send the data to the 3CX server, causing a timeout because the firewall drops the connection.
11. Get the file from the TFTP server to the 3CX server. The TFTP client will copy the file into the directory where the tftp command was issued from
12. Once its on the server change directories to the Grandstream firmware location
13. Copy the ring1.bin file in the firmware directory to the location where you copied the ring1.bin file from the TFTP server as ring1old.bin (I put both files in the "/" directory)
14. Delete the ring1.bin file in the firmware directory
15. Copy the new ring1.bin file from the directory you copied it to into the firmware directory and make sure its name is correct "ring1.bin" without the quotes
16. Goto the IP of the phone you are working with in a web browser
17. Login to the admin interface of the phone and go to the upgrade/provisioning section
18. Copy and paste the config server path into a notepad for easy input later and delete it
19. Copy and paste the firmware server path into a notepad for easy input later and delete it
20. Type in the IP or DNS name of the TFTP server, do not specify the ring tone file name, the phone will look for ring1.bin, ring2.bin, etc... manually. If the file was placed in a sub-directory specify the sub-directory as well
21. Change the server type to tftp and hit save and apply. Monitor the TFTP server to make sure the phone goes out and grabs the file, you will see several errors since it looks for ring1, ring2, etc... but as long as it successfully gets the ring1.bin then its good.
22. Once it copies it go to the settings->preference->ring tone and go to ring tone 1, if it plays your ringtone then its good.
23. Go back to the phone web interface and copy and paste the original values for the config and firmware server path and hit save and apply, then click re-provision at the top of the web page and check the phone screen to make sure it succeeds (both server types should not be set to HTTPS)
24. After this do one final test by going to the ring tone settings on the phone again to make sure it keeps the ring tone, if it does then its good to go.
Notes: If you need to add a second custom ringtone simply change the name of the file to ring2.bin and follow the steps above, continue for each additional ringtone, changing the number each time
After the ringtone is successfully put on the phone you will need to modify the phone's template in 3CX and re-provision it for it to actually use it (except in cases where it is using Ring Tone 1 since that is what we replaced). There should be guides out there for this so I won't touch on it here.
Incase anyone is wondering i tried just replacing the ring1.bin file on the 3CX server at first but the phone would not download it no matter what I did, which is the reason for the rather round about TFTP steps, it seems it will only download ringtones from a TFTP server.