Apart from the family trick (that I never really got^^) you can always work with variables:
+ MouseKeyboard: Mouse is over Sprite
+ System: Sprite ('pid') Equal to 2
-> System: Set global variable 'toOpen' to 1
+ System: Is global variable 'toOpen' Different to 0
++ Sprite: Value 'pid' Equal to global('toOpen')
--> Sprite: do whatever needed to open the door
++ empty condition
--> System: Set global variable 'toOpen' to 0
One sprite with several instances. They all share a private variable named "pid", which is set to 1 for the first instance, 2 for the second, and so on. If you setup the pid wisely, you can simplify the first event. For example you could give all switches the lower numbers, and all doors numbers + 10 (or whatever many doors you have) So a switch with pid 2 belongs to door with pid 12, 3 belongs to 13, etc.
Then the first event would read:
+ MouseKeyboard: Mouse is over Sprite
+ System: Sprite ('pid') Lower or equal 10
-> System: Set global variable 'toOpen' to Sprite ('pid') + 10