how to do node preview validation?
There is no difference between Form Submit button's validate hook and Form Preview button's validate hook.

If you set the form's validate hook in HOOK_form_validate, you have set a secondary validation hook (it means if the default validation hook is passed, then it's the turn of the one you have set) which can be used for both Submit button and Preview button:

function MYMODULE_form_alter(&amp;$form, &amp;$form_state, $form_id) {
   $form['#validate'][] = 'XYZ_validate';
}