How to use bpy.ops.macro - defining macro steps
Here is a corrected version: the Test.define needed different values.
Works perfect now - even including calling the transform and waiting till that is done so you script can continue with the next command/macro!

The transformation is started via calling Test.define("TRANSFORM_OT_translate") between the first and last macro step.

import bpy
from bpy.types import Operator, Macro


#End : Snap 3D Cursor and delete empty
class Finalize(Operator):
    bl_idname = "s3dc.finalize"
    bl_label = "Finalize S3DC"

    def execute(self, context):
        bpy.ops.view3d.snap_cursor_to_selected()
        bpy.ops.object.delete();
        print("DONE!")
        return {'FINISHED'}

#Start : Create the empty
class Make(Operator):
    bl_idname = "s3dc.make"
    bl_label = "Make S3DC"

    def execute(self, context):
        bpy.ops.object.select_all(action='DESELECT')       
        bpy.ops.object.empty_add()       
        print('Started')
        return {'FINISHED'}

#Execute : Start the macro sequence
class S3DC(Macro):
    bl_idname = "s3dc.trigger_macro"
    bl_label = "S3DC Macro Sequence"

# UI Button in Tool Shelfe
class ObjectData(bpy.types.Panel):
    bl_label = "Object + Mesh Data"
    bl_idname = "ObjectData"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'
    bl_category = "Modeling Toolbox"

    def draw(self, context):
        layout = self.layout
        row = layout.row()
        row.operator("s3dc.trigger_macro", text="Run Set 3D Cursos macro")

# END     
def register(): 
    bpy.utils.register_module(__name__)

    S3DC.define("S3DC_OT_make")
    S3DC.define("TRANSFORM_OT_translate")  # This starts the transformation command 
    S3DC.define("S3DC_OT_finalize")    

def unregister(): 
    bpy.utils.unregister_module(__name__)

if __name__ == "__main__":
    register()