You always need a JTAG for in-circuit debugging the code. For just getting the code to the brick use the Bare Metal method - you do not need a in-circuit debugger. But it will be very useful because you start at point zero. No display drivers, no button drivers, no communication to the ATmega48. That one will shut off the power if you do not send the string "Let's samba nxt arm in arm, (c)LEGO System A/S" to it (Bare Metal does this in the init routine).I don't want JTAG to be required.
Why are you going to try this? Are there real limits of the nbc virtual machine for you? Did you ever try any other firmwares (lejos, pbLua)?
I think to start with "Bare Metal" without any microcontroller experience is not the easiest way. There are some simpler robots out there with ATmega16 or the Adurino System to start.
To get really started with a microcontroller you need to know about the peripherals of that one and of course about the circuit where it is built in. I am sure you did take a look to the shematics Lego published on their web site. Did you take a look to the datasheet of the microcontroller (AT91SAM7S256)? Just go to the Atmel page and take a real look in there. If that is your world - fine
To get the peripherals run take a look to the lejos c-source code. They have well checked c routines to get the peripherals work. I checked it - you have to download a GNU tarball when browsing the repository - in the standard source package these sources are left out...
Have fun
Marvin