In the "tick" method , you need to set the y component of the deltaMovement to be positive (to rise) or negative (to fall). The exact value that you use will determine how fast.
//FallingBlockEntity uses the following values (when gravity is not disabled)
//by adding the velocity, it allows the entity to have smooth movement and allows directions other than straight down
this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.04D, 0.0D));
Looking at the tick method of the FallingBlockEntity class it may give you a better idea of how it works.
I would do it by creating a subclass of FallingBlock (if it is still called that) and adding a targetHeight field, then making the block "fall" or "rise" to meet that height, before turning into the specified block. That way most of the code should be reusable from the parent class.
You will have to register it as a new EntityType.
Then when your block rises, you create a new instance of your entity, with the targetHeight one block higher than the current y position.