For sure this would be cleaner when the backend protocol is known by HAProxy (like HTTP).
Today we put everything in TCP on HAProxy_1 to keep its configuration simple and independant from the backend type (we have many backends and it is easier for us to manage the backend specific stuff only in HAProxy_2).
However even if we did that, in the case the backend is itself pure TCP (a protocol not known to HAProxy) then we would still have the issue… HAProxy_2 correctly detects that the backend is down but HAProxy_1 does not notice…
One great approach would be to support a tcp-check wait <timeout>. If the connection is closed before the end of the timeout then the check would be considered failing.
I can’t answer that, I suggest you file a feature request on github for this. However I’m not sure we want to bring in so much feature creep in the already complicated health check code, for a domain specific workaround.