I'm not sure you understand what
Broken by design
would mean here.
The tool height and probe are 2 entirely separate devices with entirely separate functions, and while they might both use a probe cycles to determine the actual position of x y z, they have different uses entirely.
the tool height setter should work in the following manner.
Use probe to determine height of sensor relative to Z travel
Insert tool, probe tool on height sensor to determine OFFSET from PROBE, store offset
Use probe to find work piece Z zero/touchoff
save data for each individual tool, for instance if you have a ATC or even quick change tool holders.
Tool height should be a completely separate input from probe. It can obviously use probing cycles to find depth, but beyond that, it is a entirely separate function.
SHARING the input is problematic, the touch probe is not the tool height sensor and should not be treated as such, it is not a spindle mounted tool. It's also much easier to keep the tool height sensor in the same place at all times, so once the data is stored for the offset, it never changes, this reduces ERRORS and stack up tolerances. Adding a new cutter, touch of the tool off on the height sensor and the offset are handled for you
I suppose I could wade my way through the EMC2 code, but without having any familiarity with the code base that looks problematic. I assume it's all written in C ?