Removing unneccessary p-tags (Not every p)

If what you want is really only

to prevent WordPress from adding empty <p></p>

and you’d be happy with removing those after post retrieval from the database, then

function wpse108194_remove_empty_paragraphs( $content ) {
   $content = preg_replace( '#<p>\s*</p>#', '', $content );
   return $content;
}
add_filter( 'the_content', 'wpse108194_remove_empty_paragraphs', 11 );

will do.