Anytime your separation layers meld into each other, it's a violation.
Having a declarative-only View makes it easier for non-programmer UI designers to change the UI. If you have code behind, then they will have to manage that code. The ViewModel doesn't care who is above it, doesn't care what View is consuming it. It is possible to have multiple views, for example a read-only and an edit View.
The ViewModel (VM) shouldn't be talking to the backing data store, that should be the job of the model. So having your VM work with the database directly would be a violation, that's the job of your Model.
Personally I make MVVM my own. There are the design principles I follow to the best of my ability but if the pattern becomes burdensome then I may violate it here or there and note it. It is supposed to make things easier on large projects, not harder.
However, with a lot of the MVVM frameworks there are for you to use now-a-days, it would be best to just pick one that fits and stick with it. These are designed to reduce the burden of the pattern and it should be an absolute best effort to not violate the pattern.
I think I violate the pattern because I use a WCF reference as my Model and talk to it from my ViewModel. I believe I'm supposed to actually create the Model manually and have that talk to WCF directly. I find this to be too much work.