I don't believe there is a way to initialize class variables without writing code to explicitly set those variables.
That's not just a JSON deserialization thing, though JSON deserialization makes things just a bit more difficult because it doesn't run any constructors for the type you're using.
You could turn your class variables into properties and take advantage of your ability to specify a getter to do lazy initialization.
Anonymous apex example:
public class LazyLoadVars{
public Account myAcc {
get{
if(myAcc == null){ myAcc = new Account(); }
return myAcc;
}
set;
}
}
LazyLoadVars llv = new LazyLoadVars();
// Also works when deserializing from JSON
//LazyLoadVars llv = (LazyLoadVars)JSON.deserialize('{}', LazyLoadVars.class);
llv.myAcc.Name = 'Success!';
system.debug(llv);
I'm not sure if I would recommend such an approach, however. I get a dirty feeling when I read this that I can't quite put my finger on.