An orthogonal, less robust approach is to lazily (in the lazy programmer sense) exploit last-connect semantics.
Whatever is the last assignment in the module is going to "win" over everything else. If you use a `when (!reset) { reset_method() }` as the last thing that you do in some Chisel this becomes the de facto reset condition (assumedly, so long as you're not defining a reset condition along with the register definition).
The thing to be careful about here is that this really has to be the last thing that happens... this can get screwed up via inheritance, trait mixin, etc. There would then be some motivation in throwing the reset condition into a trait and mix that in last.
I've used this when dealing with a somewhat complicated reset, e.g., a partial reset of a register bundle. This use of last connect semantics does decrease code readability.
I'm actually not that against postponing the processing, however, the FIRRTL compiler is the natural approach for this as opposed to post-processing Verilog which I've found to be horrendously error-prone, e.g.:
1) Annotate modules/components with a newly-defined 'ActiveLowAnnotation'
2) Write a FIRRTL pass that consumes the 'ActiveLowAnnotation' to make the modifications that you want
Note: I'm biased. Everything looks like a FIRRTL pass to me...