I'm not sure that's true. Take, for instance, your previous example:

```js
if (bar.baz_boom) {
    // ...
}
```

or 

```js
var foo = bar.baz_boom;
```

or

```js
[foo.bar_baz]
```

These are all valid, but are not inside of a `CallExpression` or `AssignmentExpression`. I'd say that the determining factor _is_ the parent, because the determining factor is the context in which the underscored `Identifier` occurs. That's the exception to the rule that we're carving out.

It can never be the object on a `MemberExpression`, but it can be the property on it, but only if that `MemberExpression` is the right-hand of an `AssignmentExpression`, the init of a `VariableDeclarator`, an element of an `ArrayExpression`, the test of an `IfStatement`, or the direct child of a `CallExpression`. The pattern seems to be that underscored properties are valid when they occur as a certain property on a node (test on `IfStatement`, init on `VariableDeclarator`, element on `ArrayExpression`, etc.).

What I have written may not be the correct approach, but it does seem like the parent is what determines validity, unless I'm missing something or misunderstanding you.