The problem with using software to drive the reset lines is that as soon as reset is asserted, all the I/O pins go high impedance; the line may rise again before it has been held low long enough to reset everything.
I would have one of the microcontrollers(probably the '328p) reset the others via an I/O pin, then reset itself with a WDT reset.
Good point! And, how about this. Have the 328P reset the others, and, if the 328P also needs a reset, then, for instance, the ATTiny85 can, following it's own reset, issue a Reset to the 328P. How is that possible, you ask?
Let me explain:
There are a set of flags that can be used to determine what caused a particular Reset. In the 328P these flags reside in the MCUSR register and are as follows:
PORF: Power-on Reset Flag
BORF: Brown-out Reset Flag
EXTRF: External Reset Flag
WDRF: Watchdog [Timer] Reset Flag
[I didn't look up the flags for the ATTiny or the ESP-12, so, don't know if such exists or how similar they are if they do, but I've never know an MCU to *not* have such flags]
So, assuming the ATTiny85 also has such flags, and for the sake of discussion, lets say they are the same [as they probably are], following the External Reset induced by the 328P, the ATTiny85, checks it's EXTRF flag, and if set, has a pretty good hankering it came from the 328P, so it clears it, and then issues an External Reset to the 328P, which also, following the Reset, checks it's EXTRF flag, and if set, is by-gosh sure the ATTiny85 was the instigator, so it goes on with whatever business should follow an external reset.
And, at anytime, the code in either MCUs, can also use the PORF flag to double check, and know it just Powered Up. In fact, probably a good idea to, during the initialization phase [called "Setup" in an Arduino Script"], check the PORF flag, and clear it if it's set. That way, you avoid possible ambiguity, down the road.
And, BTW: This solves the Reset timing issue, as the 328P can, programmatically, hold the Reset line low for however long it needs holding, for the Reset to properly register.
Note: Be sure, if you decide to implement this crazy scheme, to rewire that Reset line [the one that currently goes to ALL the Reset inputs].
Note 2: Of course, this is not the correct solution if all three of these MCUs need an exactly simultaneous Reset.