This is a major improvement on what was available in 3.x. Now you write a class in the server that will be called when the process step starts. It uses the name of the step definition to find a class that inherits from processtepbase to find the class to call.
Within the class you can override the execute method, and you can navigate around the related objects. In the example I navigate to the object that is attached to the workflow and check a property on it.
ChangeStatus is the property, and if the status is not Issued then I reject the process step and set a message to the next step.
You have all the server functionality at your disposal, enabling you to query for data, expand relationships, update/create objects, and call MethodDefs on objects and so forth.