I found the flaw(s) in my thinking by reading
http://www.ddj.com/cpp/184402074?pgno=1
> In B and C, we know the default constructors will not invoke the
> A constructor, but we have to supply it anyway. This is pretty
> quirky. In fact, the use of virtual base classes and their need to
> be initialized by the most derived class can come as a shock to
> someone who thinks they are doing straightforward single
> inheritance.
Because Base is virtually inherited, its constructors are not called in the Der1 and Der2 classes, despite the fact that the constructors are there in the initializer list. As a result, the most derived class must call the constructors. There isn't a need for an initVars() function if this rule is applied. As long as the proper constructor is called, it will work just fine. In other words, Joined would call the Base constructor, Final would call the Base constructor, and subsequent classes would need to call the Base constructor.
Virtual inheritance seems powerful, but rather useless if this is the way it behaves. I can understand why it happens, but I wish the compiler would do what I tell it to do, not what it is supposed to do to avoid conflicts. :P Wishful thinking, huh?
I guess one good rule to remember is to avoid the diamond pattern when designing libraries.