I guess I’m a little bit late to this discussion, but I have to admit, I’m a little bit confused about some aspects of the proposed solution.
It is my understanding that a way describing a form of transportation or linear route (e.g. a waterway=*) indicates travel along the length of that way. Mapping a lock gate as linear way tagged with waterway=lock_gate would then seem to be counterintuitive, as the waterway traffic does not travel along the way (along the width of the lock gate), but rather across the way (through the lock gate). This immediately rules out options 1 and 3 from the OP — a way tagged as waterway=* cannot be mapped perpendicular to the actual real waterway.
I don’t know how often the numbers on the wiki update, but they suggest that the majority of examples of waterway=lock_gate are mapped as nodes. This is entirely intuitive as canals are mapped as linear ways, and from the perspective of boat traffic on the water, the lock gate is not a way on which you travel, it’s a point through which you pass as you enter/leave the lock.
So for the simple case of a lock gate without a foot crossing, there’s no reason why a lock gate itself should be anything other than a node (except for micromapping purposes).
Having established that lock gates should be mapped as nodes, how do you then apply a foot crossing to this? Well, you just draw a way across it. This doesn’t and shouldn’t affect how we map the lock gate itself, which is still a node, albeit with a footway now connected to it.
This is essentially the second option listed in the OP, which is described as “doesn’t quite pass the smell test”. Except… it literally does pass the smell test? This isn’t tagging for the router/renderer, it is the literal truth on the ground (or water). A way that is traversible by foot factually does cross over the water, therefore it must be mapped as such. This isn’t in any way complicated or controversial, and the presence or absence of the footway doesn’t affect how the lock gate itself should be mapped.
I’m curious as to what validation errors JOSM would throw for this ‘way and node’ solution, because iD quite correctly does not show any errors for that. If JOSM does throw errors, that’s something that should be fixed within the validator itself, not by us working ourselves into knots to try to trick the validator by offering it unreal workarounds.
Compare the example of roads where sidewalks are mapped separately. Essentially the same principle is applied there when a footway crosses a road. The pedestrian is walking on the road surface, rather than on a separate paved walkway, yet nobody would suggest to map both a highway=footway and a duplicate highway=road going perpendicular to the actual road. Similarly you cannot map a waterway perpendicular to the real waterway.
Similarly, there can be no possible justification for mappng separate parallel/overlapping ways for both lock gate and footway, as that does not accurately describe the reality on the ground. A lock gate is a node. If a footway happens to pass over it, so be it.