How to apply a driver to rotate an object around a custom orientation?
You can use Constraints to animate the axle. Constraints are like commonly used drivers that have a gui configuration.

In the following example I have two empties that define the position of the universal joints. The rear one is a child of the diff to follow it around and it has it's rotation animated. The rear tailshaft has a constraint to copy the location of the rear empty, a TrackTo constraint to have the opposite end always point at the front universal joint and a Transformation constraint to amplify the rotation.

Note that the TrackTo constraint will pivot the object on it's origin so you want to place the object origin at the center of the universal joint.

Where a Copy Rotation constraint will do a straight copy of the rotation, a Transformation constraint can alter the end rotation. It can also be used to turn a rotation of one object into movement of another, but in this case I am using it to have a different rotation value than the source. For the source rotation I have min at 0 and max at 360 while the destination has a min of 0 and a max of 1440, that means that a full rotation of the source will rotate the tailshaft 4 times (1440 = 360 x 4)



The front tailshaft is setup similar but uses a simple copy rotation for comparison.

The end result -