Hide menu items if the page content is empty

You could try this, loop through all the wp_nav_menu items, get the post using the Object ID then test to see IF the content is empty. IF that content is empty then unset it from the items array:

function remove_empty_items( $items ) {
    $blog_page = get_option( 'page_for_posts' );
    $home_page = get_option( 'page_on_front' );
    $postArr   = get_posts ( 'post_type=post' );

    foreach( $items as $key => $item ) {
        $tmpPost = get_post( $item->object_id );

        if( $item->object_id == $blog_page && empty( $postArr ) ) {
            unset( $items[$key] );
        } else if( $item->object_id !== $home_page && empty( $tmpPost->post_content ) ) {
            unset( $items[$key] );
        }
    }

    return $items;
}
add_filter( 'wp_get_nav_menu_items', 'remove_empty_items' );