No, sync the movement vector values. For example if pressing the forward button makes the character controller set the "forward" vector to 1.0, send a sync on that vector value. If pressing "back" sets it to -1.0, same thing -- just sync that vector. This way regardless of where the control logic is coming from -- whether it's from keyboard, controller input, or from AI logic, you're synchronizing the same vector value. Then each client can do their own movement logic. The avatar's owner should also sync pos/rot periodically -- but not very frequently -- just to ensure that everyone else's simulation is correct.
In the Multi-Purpose Game Starter Kit I was doing just this -- synchronizing the movement vector values as soon as they changed by a significant margin, and the pos/rot 4 times per second (but I could easily change it to be once per second and see no ill effects).
I was also synchronizing the position and rotation when something notable happened -- such as a collision, or an explosion.