How to create custom menu link wrapper function in Drupal 7?
Indeed, you need to register a new theme implementation. Looking about the specification of the hook_theme(), each information array must contain either a variables element or a render element. This is missing in your case and causes the empty $variables argument.

function YOURTHEME_theme()
{
    // define a custom theme implementation
    return array(
        'menu_link_custom' =&gt; array(
            'render element' =&gt; 'element',
        ),
    );
}

function YOURTHEME_menu_link_custom($variables)
{
    //Build and return custom HTML for your link
}