Saving a unpublished node without validation
Another option here is to add a custom validation function to force validation to run, and then also have a custom submit handler to clear any errors produces and save the node.

The code here is mostly taken from this question but this question and this post have also helped.

function mymodule_form_alter(&amp;$form, &amp;$form_state, $form_id) {
    switch($form_id) {
        case 'my_form_id':

            $form['actions']['draft'] = array(
                '#type' =&gt; 'submit',
                '#value' =&gt; t('Save draft'),
                '#weight' =&gt; '9',
                '#submit' =&gt; array('save_draft_submit'),
                '#validate' =&gt; array('save_draft_validate'),
                '#attributes' =&gt; array(
                    'class' =&gt; array('cancel'), // add the class cancel will skip any clientside validation
                ),
                //'limit_validation_errors' =&gt; array(), // this should be enough to skip validation however does not work for me
            );

            break;
    }
}

function save_draft_validate($form, &amp;$form_state) {
    // Set as unpublished.
    $form_state['values']['status'] = 0;
    // Force validation.
    $errors = &amp;drupal_static('form_set_error', NULL, TRUE);

}

function save_draft_submit($form, &amp;$form_state) {
    // clear error messsages
    drupal_get_messages();
    // save the node
    node_form_submit($form, $form_state);
    $form_state['redirect'] = 'node/'.$form_state['nid'].'/edit';
}