You can apply the root motion to any object, it depends what you want to achive, you can look at the TPS Demo, they have a kinematic character and an instanced animated scene, they get the motion from the animated scene and then move the kinematic character with the velocity:
orientation *= root_motion
var h_velocity = orientation.origin / delta
velocity.x = h_velocity.x
velocity.z = h_velocity.z
velocity += gravity * delta
velocity = move_and_slide(velocity, Vector3.UP)
orientation.origin = Vector3() # Clear accumulated root motion displacement (was applied to speed).
orientation = orientation.orthonormalized() # Orthonormalize orientation.
I've made a few videos about root motion and the state machine here and they are based on the TPS Demo controller.
I also made an Infinite scroller where the player doesn't move and the root motion is applied to the rooms (that project is made in C#).