The rule [1] states:
For [...] dynamic arrays, identity is defined as referring to the same
array elements and the same number of elements.
[BTW: Every two arrays having the same elements implies that they also have the same number of elements. Hence the second condition is redundant.]
In this piece of code [2]:
void main ()
{
string s = null;
string t = "";
assert (s is t);
}
the assertion trips although both conditions of the given rule are met.
The second condition of the rule is true: Both arrays have the same number of elements (zero). For the first condition to be false it requires an index position at which the elements of both arrays differ. Since there is no such position the first condition is not false, meaning it is also true.
Therefor the documentation does not document the actual behavior of D implementations (checked dmd and gdc). The issue is not restricted to the string type.
[1] https://dlang.org/spec/expression.html#identity_expressions
[2] https://issues.dlang.org/show_bug.cgi?id=17623