I think that this change is moving in the wrong direction.
I do not think there should be a dependency of NValue on TupleSchema.h in general or on TupleSchema::ColumnInfo in particular.
If this means that the caller to deserializeFrom must access another ColumnInfo member and forward it as an argument, then that's what it should do.
In my opinion, instead of tabletuple/TupleSchema functionality migrating into NValue (which is already too large), more NValue functionality -- especially the parts that know (too much) about tuple storage formatting and the parts that get involved with different kinds of tuple initialization and tuple-to-tuple copying -- should be migrating into the tabletuple.h callers and out of NValue.