I found a way that might not be the best, but works. It's a extension method to ScriptScope:
public static void SetMethod(this ScriptScope scope, string name, Delegate method)
{
scope.SetVariable(name + "__delegate", method);
scope.Engine.Execute("def " + name + "(*args, &block)\nargs.push block if block != nil\n" + name + "__delegate.invoke(*args)\nend", scope);
}