It should be pretty simple. Just use rich:messages (to get messages updated on any ajax request also.) And in order to show the modal with messages you could:
1) if there is single or a few components which requires it - just use oncomplete handler which will check FacesContext.maximumSeverity and call the modal if need.
2) if this modal should be reused everywhere on any requests messages - you could define a4j:status and use its onstop handler just in the same manned as oncomplete.