In my experience, the control effort is equal to the force applied. I haven't validated this, but that what I've always assumed it to be. It also seems you're correct about JointController only handling one axis. Of course implementing PID is very easy, and you can do it yourself. This means you can call SetForce(axis, force) and specify which axis you want to control. The JointController probably defaults to the first axis specified in sdf.