Hide Workflow Tab For Given State
Solved it using hook_menu_alter and adding custom module. I have modified the access callback function to suit my needs. 

Here is my code, may help user having same task:

    function mymodule_tab_menu_alter(&amp;$items) {
        $items['node/%node/workflow']['access callback'] =
        'custom_workflow_tab_node_access';
    }

    function custom_workflow_tab_node_access($node = NULL) {

    global $user;

    if ($workflow = workflow_get_workflow_type_map_by_type($node-&gt;type)) {
        if ($workflow = workflow_get_workflows_by_wid($workflow-&gt;wid)) {
            $roles = array_keys($user-&gt;roles);
            if ($node-&gt;uid == $user-&gt;uid) {
                $roles = array_merge(array('author'), $roles);
            }
            $allowed_roles = $workflow-&gt;tab_roles ? 
            explode(',', $workflow-&gt;tab_roles) : array();

          if (user_access('administer nodes') || array_intersect($roles, $allowed_roles)) {

      /* This is additional Condition*/

      if ($node-&gt;type == "article") {
     $current_state = workflow_get_workflow_states_by_sid(workflow_node_current_state($node));
                    if ($current_state-&gt;state == "State_name") {
                        return FALSE;
                    } else {
                        return TRUE;
                    }
                } else /*End Additional Condition */{
                    return TRUE;
                }
            } else {
                return FALSE;
            }
        }
    }
    return FALSE;
}


As above in custom access callback, I have used the same code, just added the additional condition and it solved my issue. :)

-- Thanks