What is Best Way to Retrieve Status Messages in Multiple Locations?
The solution was using Drupal cache pattern by storing messages in static space as following:

function get_messages(){
    $status_messages = &amp;drupal_static(__FUNCTION__);

    if(!isset($status_messages)){
        //loop through each message type
        foreach (drupal_get_messages(null, true) as $type =&gt; $messages) {
               foreach($messages as $key =&gt; $message){
                   $status_messages[$type]['enabled'] = true;
                   $status_messages[$type]['messages'] = array(
                       'message' =&gt; $message
                   );
               }
        }
     }
     return $status_messages;
}


Here, we get the static reference first and then check if its already set. if not, we retrieve the messages and reset at the same time by calling Drupal API function drupal_get_messages with "true" parameter. As result, we reset the messages that solves our problem and, in addition, our performance is improved due to caching

I have also summarize it all at my blog post "Caching In Drupal"