JTAG is the way to go: debug/flash across different vendors without an itch.
Other proprietary debug interface can be more efficient and requires less resources, but they all end up being expensive and lock you to a vendor.
For price, you can DIY a wiggler-like parallel interface (if your PC have one). There is also some low price interface based around FTDI chip (I use one from http://www.embedded-projects.net/
PS: embedded project has also USBProg interface, which can handle AVR/ARM/JTAG, but I do not know this product in detail.