No, I don't think so. You want each child Context object you create to have its own childContexts field.
It works, because you pass a table containing a name field to New function. What you did here was:
Context1 = CxBR_Context:New{name = "Context1"}
- Create a table with field "name" set to "Context1"
- Pass the table to the constructor
- [In the constructor] Assign a metatable (original CxBR_Context table) to the table you created in the first step.
So basically, when you call Context1.name, you retrieve a field from the Context1 table you created when invoking the constructor. But when you index it with childContext and no such field exists (since in the constructor stage you only created a "name" field), Lua looks in the __index table, which is CxBR_Context. And this table is common to all ContextX objects.
EDIT:
object = object or { childContexts = {} } -- create object if user does not provide one
Actually, this won't work either, if you supply your own table like in this:
Context1 = CxBR_Context:New{name = "Context1"}
It will only work if your object argument is nil, that is if you invoke the constructor just with self parameter.