How to hide a block enitirely which has empty content (unless for a specific role)? I have a custom block and I want to limit it only to one role. The position of this block is administrator->dashboard.

I have set the visibility settings of block to be shown only to role editor, but when I sign in with a user whose role is something else, such as a photographer, it shows the block with a text in it: "(empty)".

It truly does not show any content, but I WONDER why it shows the block's structure? I expect it to be totally invisible as if no such block ever exists. 

What's wrong with it?
From the question details (and comments to it), it appears to me that the "(empty)" is somehow the result of your Views output (formatted as a block).

But for anybody who has not the role of Photographer, the result of the View (the output of it) is just "empty". So you may want to try / experiment with the "No Results Behaviour", which is located in the most right column when editing the view details (within 'Advanced').

Also note that you should make a difference between "access" to the content of the nodes (or whatever) that are shown in the block (if not empty), and what Drupal shows as the wrapper/container of such list (such as the block your question is about). Maybe, just for debugging purposes, you should try to build a similar view formatted as a page (instead of a block), and see what kind of output (result) you get in both scenario's (somebody with the photographer role, and somebody who des not have that role). While doing this page-related experiment, you may get different results, depending on what you specified within the "No results behaviour". And that might help to understand that your (empty) block issue is also a matter of "No result behaviour".

If you cannot get it to work this way, you may want to consider using the BEAN module, which gives you way more granularity / flexibility for creating blocks.