Traverse and modify a deep object
You could move the logic that gets each panel / screen etc into it's own function, and remove some of the indenting, like so:

function getChildren(obj) {
    // No need to check hasOwnProperty, and keys only returns ownProperties
    return obj ? Object.keys(obj).map(function(key) {return obj[key]}) : [];
}


function removeImageFromSettings(imageName) {
    let panels = getChildren($scope.data);

    let screens = panels.reduce(function(result, panel) {
        return result.concat(getChildren(panel.screen));
    }, []);

    let variables = screens.reduce(function(result, screen) {
        return result.concat(getChildren(screen.variable));
    }, []);

    variables.forEach(function(variable) {
        if (variable.custom &amp;&amp; variable.custom[0] === imageName) {
            variable.custom[0] = "";
        }
    });
}