Yes it is possible, but you have a few options.
Option 1: C as a Subdocument
If you really want to use subdocuments, you don't need to create a separate model. You need to change your reference to the 'c' array.
var C = new Schema({...});
var B = new Schema({c: [C]});
var A = new Schema({c: { type: ObjectId, ref: 'ModelB.c' });
var Model_A = mongoose.model('ModelA', A);
var Model_B = mongoose.model('ModelB', B);
Option 2: C as a Model
(I only present this as an alternative - since your example seems redundant since you create 'C' as a separate Model as well as a subdocument)
Alternatively, it may make sense to have separate collections, you can create a mongoose model for each. Each will be a separate collection:
var Model_A = mongoose.model('ModelA', A);
var Model_B = mongoose.model('ModelB', B);
var Model_C = mongoose.model('ModelC', C);
In this case you may want to directly reference each model:
var C = new Schema({...});
var B = new Schema({c: { type: ObjectId, ref: 'ModelC' }});
var A = new Schema({c: { type: ObjectId, ref: 'ModelC' });
The Point
Yes its possible, but you need to pick if you want C as a model or subdocument.
User
has a list of friendships infriends
and every friendship has a reference to it's other-direction-counterpart). I get this:MissingSchemaError: Schema hasn't been registered for model "User.friends".
– Backdrop