Deleting a beacon proxy instance?

Given a beacon proxy setup, where the proxy contract (proxy instances) are ownable, how can the owner "delete" or "burn" their proxy instance?

If you want the proxy instance to actually be deleted you need to have a function in the implementation that invokes selfdestruct. This is usually dangerous to have in the implementation because you never want the implementation itself to be destroyed, so you should use a modifier like this:

contract DestroyableImpl {
    address immutable self = address(this);

    modifier onlyDelegated() {
        require(address(this) != self);
        _;
    }

    function delete() public onlyDelegated {
        // TODO: require(msg.sender == owner);
        selfdestruct(msg.sender);
    }
}