From the XAML Loading and Dependency Properties article on MSDN:
For implementation reasons, it is computationally less expensive to identify a property as a dependency property and access the property system SetValue method to set it, rather than using the property wrapper and its setter. This is because a XAML processor must infer the entire object model of the backing code based only on knowing the type and member relationships that are indicated by the structure of the markup and various strings.
...
Because the current WPF implementation of the XAML processor behavior for property setting bypasses the wrappers entirely, you should not put any additional logic into the set definitions of the wrapper for your custom dependency property. If you put such logic in the set definition, then the logic will not be executed when the property is set in XAML rather than in code.
So the answer to your question is: No, the setter is not necessarily called.
In order to get notified about value changes of a dependency property, you will have to register a PropertyChangedCallback via dependency property metadata:
public static readonly DependencyProperty StrProperty =
DependencyProperty.Register(
"Str", typeof(string), typeof(CustomLabel),
new PropertyMetadata(StrPropertyChanged));
private static void StrPropertyChanged(
DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
var label = obj as CustomLabel;
var str = e.NewValue as string;
...
}