I've found the answer. In case of using custom tab, it should be programmatically set to available in server-side code, using delegate control or web part. Here is an example: http://makarandrkulkarni.blogspot.com/2010/01/sharepoint-2010-ribbon-customization_09.html
Another thing worth mentioning. If you add Command attribute to your tab, group or something else in Elements.xml, you should handle this command in your page component to get it enabled.
I have seen a few times when working with the ribbon that even private mode still didn't work. I had to hit F12 and run the dev tools and say clear cache for this domain.