I think SwapAxis() will work fine 99.9% of the time if you take the proper precautions, such as inserting ResetAxisSwap() in a macro that somehow gets run prior to shutting down Mach, and/or at the end of a gcode file, etc.
I've been discussing the issue over on Joe's forum where a user has been running dual Z axes for a year or two now. He uses a modified post-processor in Aspire to handle most of the leg work, but it works very well for him. My only problems with a modified post-processor are that (1) it only works for one tool at a time - when you want to run toolpaths for the second Z, you have to save a new file and then combine the files by had afterward, and (2) it only works with one CAM package unless you write a new post processor or for all your CAM software.
SwapAxis() is a good and simple way to do it and given the ideas to make sure it is reset I don't see much of a chance for problems, especially if you use the LED Gerry is talking about - that is a good idea. But in my opinion, SwapAxis() doesn't really fully capture the essence of what is going on with a dual Z setup. If you use SwapAxis() exclusively, you are really turning your dual Z (two separate axes) into a single Z axis that can by swapped out and offset. I like the ability to jog both Z's independently, and I like the idea of gcode telling the machine exactly what to do rather than tricking the machine into changing pin assignments in the middle of a job. Again, that is really just personal preference when it comes down to it.
That said, there is apparently one more additional benefit to SwapAxis() that hasn't been mentioned yet, although I have not yet begun looking into this issue: Apparently Mach does not let you probe on an A, B, or C axis - that is, you can't use a touch plate to set Z-Zero on the A, B or C Axis (this is according to the user on Joe's forum - again I haven't started looking at this yet). My inclination is that there must be a way to make this work. However, his solution was simply to use SwapAxis() prior to probing, which solves the problem. He's now able to use the touchplate for both Z axes.
Gerry I've already modified your screenset heavily to account for other changes, but it sounds like your touchprobe scripts will need to be modified as well. Having worked on those and given your knowledge of how they work do you think they could be modified to use a different Axis or will SwapAxis() be necessary on those scripts?