Good time to switch to VHDL and use the generate statement.
Just kidding, so no flames or starting of a religious war between VHDL and verilog, okay?
I think what a lot of folks do is run a pre-processor, like a perl script, on their verilog code to handle things like this. I mainly use VHDL but I worked at a verilog shop a couple of years back where one of the guys would name his original source files *.vpre. Then he would run his pre processor on them and convert them to standard *.v files. In addition to replicating instantiations he would also do some rudimentary type/port width checking.
Radix