Hey, Penguin here. 
That was like my first few post while start learning UE4 and have no previous UDK experience, so you are **** right I am just showing what I found working.
(without knowing if that’s the proper way to do things.)
We can break it down to 2 things.
-
Movement Component, the one properly setup is CharacterMovement. I don’t think there is one generic movement that are ready for use for static mesh based.
So from experience, you can assume that setup the entire thing to be efficient with just blueprint is a bit difficult as you have to also try to do some optimization to reduce updates.
(ie. only update if the input axis value changes, use previous value if server didn’t update variables on client side, etc.)
-
update to server or notify server and then fetch updated value are approaches. In games that allows super speed, crazy jump, infinite sprint, etc, you can bet they don’t do those on server side, or some checks are done on client that gets exploited.
It’s pretty much a playability over high latency and secure update to prevent cheat trade off. This was discussed on some previous thread so I won’t cover them again.
Now, to your question. To use tick to try update server is much more inefficient, as network tick and event tick are run at different speed, you would be trying to force update but they are just in the queue, maybe even repeated.
The best compromise I think that’s necessary is to design your mechanism accordingly, if one value does not hurt the game even if it’s being hacked, then you can just try update the final result(ie don’t update the boost gauge and direction, just update the final speed and if it’s the same from previous frame, don’t update at all. bad example, but some game if you boost you lost ability to say shoot, so mechanism is first priority.)
Now to the replicated variable, yes, it is possible to just let server or client set it and then let replication do it’s job.(at least that’s what I think in the beginning.)
Even if you don’t send a RPC, you still have to update something, then it all comes down to what are updated, and how frequent.
In my example I only have to update 2 vectors for any update, client do the calculation and server apply it like you wanted, so even if in this case people can hack the input axis value to increase maximum force sent over to server, I can always clamp it and then apply default multiplier. If the movement rules grows, we can still refer to how character movement is setup and either do it in C++ or do some components to offer same functionality in blueprint.
Anyway, the input control update part is interesting, for blueprint I know some input like mouse location are pretty much per tick update, I don’t know about joystick axis.
So if you have more efficient update method, feel free to share it. 
And, it’s much later I read about this article for UE3, I did the reliable RPC mistake before realize how stuff really works. Haha.
http://wiki.beyondunreal.com/Everything_you_ever_wanted_to_know_about_replication_(but_were_afraid_to_ask)#Reliability