Get all posts with empty meta_value

If I understand your question correctly, you want to query for region field only if $region variable is not empty? If so, this should work and it will be much prettier code than the one you suggested:

$meta_query = array(
    array(
        'key'     => 'state',
        'value'   => 'Alabama',
    ),
);

if ( $region ) {
    $meta_query[] = array(
        'key'     => 'country',
        'value'   => $region,
    );
}

$query = new WP_Query( array(
    'post_type'  => 'my_post_type',
    'meta_query' => $meta_query
) );