Let me understand this, because we now have three different behaviours only in the beamforming code (i.e. [line 110 in _dics.py](https://github.com/rgoj/mne-python/blob/971a2efd3273a22912b316a9d56d471b8e34230f/mne/beamformer/_dics.py#L110) and [line  105 in _lcmv.py](https://github.com/mne-tools/mne-python/blob/master/mne/beamformer/_lcmv.py#L105))

From what I can understand from your previous comments and playing around with make_projector:

* the 'projs' key is always expected to be in info
* if there are no projections, the info['projs'] is just an empty list
* if make_projector is passed an empty list, it just creates an identity array

So the code in _lcmv.py, i.e. without any checks whatsoever, isn't so bad after all? I.e. if we always expect 'projs' to be in info and make_projector can deal with anything it gets passed (even `None`), then I don't think there's much need for this checking to be done at all? So I'd propose to simplify the code and bring it back to [what it is in _lcmv.py](https://github.com/mne-tools/mne-python/blob/master/mne/beamformer/_lcmv.py#L105), wdyt?