Json type-safe builders using jackson-annotations
Your code is overall pretty nice. A few things I noted:


Upon first reading, I did a double-take at reading the withFoo methods that your fluent API uses. This is because there's an idiom where withFoo is sometimes a "setter" for an immutable object (which creates a new version with the update info). But after that, I read the contents of the methods and it made sense.
This is not the best way to rethrow exceptions:


public String asJson() {
    try {
        return new ObjectMapper().writeValueAsString(this);
    } catch (JsonProcessingException e) {
        throw new RuntimeException("Could not create json: " + e.getMessage());
    }
}



Notice that RuntimeException has a constructor which takes a throwable reason as well. Thus it would be much better to implement this like so:

public String asJson() {
    try {
        return new ObjectMapper().writeValueAsString(this);
    } catch (JsonProcessingException e) {
        throw new RuntimeException("Could not create json.", e);
    }
}


Don't worry; it still has the message from e. Note that your other classes also have this problem.
What's with the name of this method?


public static HolidayBuilder aHoliday() {
    return new HolidayBuilder().withDuration("1d");
}



What does aHoliday mean? Your other classes have similarly named methods, and I don't understand what they are supposed to do. You should give them proper names.