I think I must be missing something basic. I have a template that is usually called via a URL but I also want to be able to call it manually using theme()

    /**
     * Implements hook_menu().
     */
    function signup_menu() {
      $items = array();
      
      $items['list/signup/success/%'] = array(
        'title' => 'Sign-up Successful',
        'page callback' => 'theme',
        'page arguments' => array(3),
        'page arguments' => array('signup_success'),
      );
    
      return $items;
    }
    
    /**
     * Implements hook_theme().
     */
    function signup_theme() {
      return array(
          'signup_success' => array(
          'arguments' => array('node' => NULL),
          'template' => 'signup-success',
        )
      );
    }
    
    function signup_preprocess_signup_success(&$variables) {
      $signup = signup_record(arg(3));
      $variables['signup'] = $signup;
    }

How do I override the argument that is usually passed through the URL? So I can call it like this:

    theme('signup_success', $signup-id);

The preprocess function only ever takes the argument that comes from the current URL which is incorrect.