Thanks Archie.
The first image shows a "city" generated from my current set of buildings using a simple bitmap-based texture.
I spent a bit of time tweaking Archie's material...
The second image shows the tweaked material (which uses UV1 and eliminate the noise-driven bumpmap -- not sure why that's there) side-by-side with the image-based material.
The third image shows a far more tweaked material (including corrected scale). One thing I'm finding very frustrating is that I'd like to use the UVs to drive the material BUT randomly offset them using the instance node (so each building will look unique) but I can't seem to get that to work.
It would be very helpful to have stripes and grid texture nodes (although creating suitable bitmaps is easy enough). The brick texture with an adjustable row offset would give us a useful grid. It would also be nice to have procedural non-square grids (e.g. triangles and hexagons). Again, producing bitmaps isn't too hard.
It would also be very helpful to be able to replace material A with material B without needing to reassign materials to every object in a scene.
Right now, using the checkboard to generate stripes is a hack, and doesn't let us (for example) make the non-window areas thinner or thicker. The lack of a useful grid prevents making other common kinds of facades (as well as making things like bathroom tiles require bitmap inputs -- or way more math nodes than you'd like).
Notes
The new particle nodes give you a random-value-per-instance which lets you do things like pick a color randomly from a gradient to give each instance a random tint. Unfortunately this isn't going to do any good one a single building where, for example, we might not want every light to look the same (although buildings tend to have fairly uniform looking lights).