Update: The more I think about it the more I'm leaning towards a custom control with good data binding support (important for MVVM). There are a lot of sources on the net covering this.
A semi answer to the question is there are two problems. The first is the display of complex data and exposing binding support, the second is MVVM practices on binding to it (but this becomes straightforward as the bulk of the problem is in the drawing). How does MVVM do vector graphics? It doesn't, the control does. How does the control expose what it needs in an extensible/generic way? Not sure, but the WPF Control Toolkit libraries on CodePlex will have some more involved examples.
This isn't really a "here you go" answer, but from a mindset perspective I think an important thing to consider is the ViewModel shouldn't care how it is "shown" (as in, ViewModel does not know View).
However, that isn't to say the ViewModel should not care what Model is presented.
A good Model structure for representing an office plan (with properties such as height, x/y coordinates, etc) is the important part. The ViewModel can then validate the model, the view simply responds to such validation results. This obviously creates a coupling between the ViewModel and the Model - I'm not sure what the "rules" are there.
The visual representation of this then hangs off the Model, and commands such as "insert door" can be solved with standard MVVM routed-command style coding. In your case, the ViewModel response would be to insert a new Door to the Office Plan model at the associated CurrentSelectedWall.
Or something like that.
The question I can't answer is: is the perceived tight coupling between the View and the Model allowed? In my sample, the Model would hold all the key information for the View to draw the shapes (height, x/y etc). Perhaps this can be abstracted out.
Unfortunately, creating the view likely won't be possible with simple data binding in XAML - I can only see a view-code-heavy way to do this... :-(
The alternative is a custom control that exposes the data it needs and provides data binding points to receive that data.