Yes, it's possible. You need to rig it twice, once in each direction.

No bone here is parented, but I've raised each bone in the Z axis to indicate a hierarchy of "copy rotation" constraints. There are five bones. First we travel through the gears one way, copying rotation along the way. Then we travel back along the gears in the opposite direction, again, copying rotation along the way. (The middle bone doesn't need to be duplicated.) The gears themselves are parented only to the final bones. The first three bones here should be understood as the control bones; the last two bones should be hidden.
Imagine rotating the second bone, indicating the middle wheel. Nothing is directly parented to this, so there is no immediate effect from this. The first bone is unaffected, but the third bone rotates properly via its constraint, rotating the right gear.
This rotation is then propagated to the fourth bone, which is what is responsible for actually rotating the middle gear, and then to the fifth bone, which rotates the left gear, even though there was no transformation given to the first bone.
GearSystem
class and use some custom property to mark objects as gears. While in "drive mode" a driver on some property akin toGearSystem.rotate(self)
will drive and set all the others based on context object being the driver gear. $\endgroup$ – batFINGER May 28 '18 at 9:34