Reading and Converting XML File to Array
Types

Your code would be easier to read if one variable could only be one type. $plugins is initiated as a boolean, but can also be an array. But what would a boolean value even mean? $plugins = false; doesn't really make sense.

If there are no plugins, your code should just return an empty array. If there are errors loading the plugins, you could return false (but don't use the $plugin variable for that), or ideally throw an exception if you are using PHP5. 

Don't reuse variables

You shouldn't reuse variables for completely different things. For example $plugin_array seems to be holding a lot of different data, which is quite confusing.

This for example: 

    $plugin_array = json_decode( $plugin_json, TRUE );
    $plugin_array = ( ! empty( $plugin_array ) &amp;&amp; isset( $plugin_array['plugin'] ) ) ? $plugin_array['plugin'] : '';

    if( ! empty( $plugin_array) ) {
        // do stuff
    }


Would be better as:

    $plugin_array = json_decode( $plugin_json, TRUE );
    $is_valid_data = ! empty( $plugin_array ) &amp;&amp; isset( $plugin_array['plugin'] );
    $plugin = $plugin_array['plugin'];

    if( $is_valid_data ) {
        // do stuff
    }


Or you could just save the $is_valid_data variable by putting the expression inside the if directly.

Return early

Generally, your code will get a lot more readable if you handle simple checking at the top of your function, and return early. This will also reduce the level of nesting. eg:

if( empty( $plugin_list ) ) {
    return array();
}


And the same with $plugins = ( ! empty( $plugins ) ) ? $plugins : false;, which could just be:

if ( empty( $plugins ) ) {
    return array();
}


Or just ignore it, as there doesn't seem to be an error to handle (it's already empty, and returning an empty array if there are no plugins seems appropriate). Same goes for if( ! empty( $plugin_array) ) {.