In the "update" or "tick" or "onUpdate" method (I'm not sure what it's called anymore, as I haven't done anything with entities recently), you need to set the y component of the "velocity" vec to be positive (to rise) or negative (to fall). The exact value that you use will determine how fast.
If you look at the method (that used to be called "fall") in the entity class it may give you a better idea of how it works.
I'm sorry that I don't know what any of the methods are called any more.
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.