I'm still on the stock 4.0.2 ROM because it has been working flawlessly and I've managed to get great battery life with my phone, comparable to the best results on XDA from others on VZW. I've also noticed that in general, battery life seems to take a bit of a hit with a lot of ROMs due to some of the extra performance stuff, or newness of the ROMs.
Here are the things I've done that have helped me with battery life:
1) Undervolt Processor using SetCPU and custom Kernel: Rooted and installed the Jame Bond Kernel 1.35GHz. It does a mild OC on the GPU and enables 1.35GHz and also allows undervolting via SetCPU. I keep my phone at max of 1.2GHz as I really don't need the extra speed. Dropped the voltage for each clock speed systematically till I found the stable volts at 350MHz, and higher. If you go too low, your phone will reboot when stressed and then you can go back and push up the mV a little bit. Also make sure you don't set the voltages to be applied on Boot as that can result in bootloops if you go too low with your settings.
Keep in mind, that I chose this kernel specifically because it doesn't do any other fancy tweaks/fixes. It just enables undervolting and overclocking. This is good for a baseline. I will eventually try one of the fancier kernels like Franco's, but it would be good to first test with something close to stock. The only reason I used this kernel over stock is because there is a lot of power savings to be had by undervolting the processor.
2) Turn off softkey sounds : Using Better Battery Stats, I noticed that Audio_out or something named like that, was causing a huge amount of partial wakelocks (i.e., preventing the phone from going into deepsleep). After googling the issue, I came across a thread on xda where someone else had the same issue and was able to fix it by turning off softkey sounds when they are pressed. This worked for me.
3) Monitor Apps and Processes : Using Better Battery Stats, CPU Spy and Battery Stats Widget, I kept a close eye on any run away processes in my first week, as I tested the battery every night. CPU spy should ideally report 80-90% Deep Sleep if you are not using your phone. Look at the Battery settings screen in ICS to make sure your phone wasn't awake intermittently while you left it off the charger overnight. If it was, try to figure out what processes are waking your phone up and consuming power.
4) Stay with stock (apps and ROMs) if you can (for now): I think it is good to stay with stock and establish a baseline for your battery life and phone performance. This is really useful when you switch to other ROMs and Kernels and you'll be able to tell if they are working better or worse for you. For example, I noticed that with one of the updates for NOVA Launcher, my batterylife got a lot worse, but none of my monitoring apps were pointing towards it being the culprit. I uninstalled it and went back to the stock launcher, and everything went back to the way it should be. Not trying to blame NovaLauncher (I think it is great), but just that it makes sense to take things slow, and build a baseline with your base setup before you go mucking with other apps and ROMs.
5) Always stay on Wifi if you can: Staying connected to Wifi provides better standby power consumption numbers v/s being on 3G or 4G (worst).
I prefer not having to use things like JuiceDefender, etc, to turn off Data as it seems to negate the point of a smartphone. I've found that my GN has excellent standby battery life and I can easily go 30+ hours with normal use without the need to charge. At home, I'm usually always on my home Wifi, and my battery drain is around 1-1.3% per hour. It can go lower if I set it to airplane mode overnight.
This is with Stock 4.0.2, and the Jame Bond kernel, and an undervolted CPU.
PS - I prefer not to use custom power profiles in SetCPU. I've noticed that ICS does a great job with the interactive governor at handling things. Some of the devs on xda have mentioned that the custom profiles can cause more harm than good as they can interfere in the phone being able to go into deep sleep. I haven't tested this, but I certainly haven't seen anything untoward from not using custom power profiles.
PPS - Once things are working well, Android System, and Screen will be your biggest power hogs. The former is an ongoing issue with ICS (though it really doesn't drain a whole lot considering the 1% drain per hour in standby that I am observing...it might just be related to a different way of reporting power consumption in ICS). Screen does eat up power, and at best, I can get 4 hours of screen time with my stock battery.