Well, here's where the exception to that "usually" comes in.
Although the elements of an array expanded as simply
$array don't get generally re-split on whitespace the way an unquoted
${array[@]} or
${array[*]} does in bash, any elements that are completely empty do get lost:
zsh% array=(one two '' '' five )
zsh% echo $#array
5
zsh% printf '%s\n' $array # King Arthur, is that you?
one
two
five
zsh%
So that's where you need the wonky inherited syntax if you want to include empty values:
zsh% printf '%s\n' "${array[@]}"
one
two
five
zsh%
Bart's question is also salient, however:
> I have a file with blank lines in it, I read it into a variable
How do you read it in, and into what kind of variable? If you want to read a file into an array of lines, preserving empty lines, you can do this:
lines=("${(@f)$(<~"$filename")}")
The stuff in parentheses just inside the ${ are parameter expansion flags, which you can read about on the zshexpn man page. In particular, the f flag splits the value on newlines, while the @ flag does the same thing as "${array[@]}" (which could therefore also be written as "${(@)array}"), but also works in other kinds of expansions, such as $(<filename) used here (which means "get the contents of the file").